package cn.tedu.oop;

/**
 * @Author 金帮嘉诚
 * @Date 2021-06-08 周二 19:10
 */
/**
 * 知识点：构造代码块 局部代码块
 * */
/*
* 构造代码块
* 位置 类里方法外
* 执行时机 每个构造方法执行之前
* 作用 用来提取所有构造方法的共性内容
* */
    /*局部代码块
    位置 方法里 与局部变量相同
    执行时机 方法被调用时 此局部代码块才会被执行
    作用 用来限制局部变量的作用范围 范围越小越好
    * */
public class TestBlock {
    public static void main(String[] args) {
        /*每一次创建对象时都会触发构造函数*/
        Teacher t1=new Teacher();
        Teacher t2=new Teacher("泡泡",18);

        System.out.println("t1.name = " + t1.name);
        System.out.println("t1.age = " + t1.age);

        System.out.println("t2.name = " + t2.name);
        System.out.println("t2.age = " + t2.age);
        t1.teach();
        t2.teach();
    }
}
class Teacher{
    String name;
    int age;
    {
        System.out.println("构造代码块~~");
    }
    public void teach(){
        System.out.println("Teaching");
        {
            int i=10;
            System.out.println("i = " + i);
            
        }/*此处不能在局部方法块前声明另外一个int i，会报错，且不能在代码块后紧跟使用i，会报错*/
        System.out.println("Teaching Done");
    }

    public Teacher() {
        System.out.println("无参构造函数");
    }

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("全参构造函数");
    }
}
